<!DOCTYPE HTML>
<html>
<!--
Bug 1023018 - Tests if the framerate actor keeps recording after navigations.
-->
<head>
  <meta charset="utf-8">
  <title>Framerate actor test</title>
  <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
  <script type="application/javascript;version=1.8" src="inspector-helpers.js"></script>
  <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
</head>
<body>
<pre id="test">
<script>

window.onload = function() {
  SimpleTest.waitForExplicitFinish();
  var {FramerateFront} = require("devtools/shared/fronts/framerate");
  var {TargetFactory} = require("devtools/client/framework/target");

  var url = document.getElementById("testContent").href;
  attachURL(url, onTab);

  function onTab(_, client, form, contentDoc) {
    var contentWin = contentDoc.defaultView;
    var chromeWin = Services.wm.getMostRecentWindow("navigator:browser");
    var selectedTab = chromeWin.gBrowser.selectedTab;

    var target = TargetFactory.forTab(selectedTab);
    var front = FramerateFront(client, form);

    front.startRecording().then(() => {
      window.setTimeout(() => {
        front.getPendingTicks().then(firstBatch => {
          target.once("will-navigate", () => {
            window.setTimeout(() => {
              front.stopRecording().then(secondBatch => {
                onRecordingStopped(client, firstBatch, secondBatch);
              });
            }, 1000);
          });
          contentWin.location.reload();
        });
      }, 1000);
    });
  }

  function onRecordingStopped(client, firstBatch, secondBatch) {
    ok(firstBatch, "There should be a first batch recording available.");
    ok(secondBatch, "There should be a second batch recording available.");

    var diff = secondBatch.length - firstBatch.length;
    info("Difference in ticks: " + diff);
    ok(diff > 0, "More ticks should be recorded in the second batch.");

    ok(firstBatch.every((e) => secondBatch.indexOf(e) != -1),
      "All the ticks in the first batch should be in the second batch as well.");
    ok(secondBatch.every((e, i, array) => i < array.length - 1 ? e < array[i + 1] : true),
      "All the ticks in the final batch should be ascending in value.");

    client.close().then(() => {
      DebuggerServer.destroy();
      SimpleTest.finish()
    });
  }
}
</script>
</pre>
<a id="testContent" target="_blank" href="inspector_getImageData.html">Test Document</a>
</body>
</html>
